#include "cpu/exec/template-start.h"

#define instr leave

static void do_execute() {
    // Step 1: 将基址指针（ebp）的值复制到栈指针（esp）
    cpu.esp = cpu.ebp;

    // Step 2: 从栈中弹出保存的基址指针，恢复调用者的 ebp
    cpu.ebp = swaddr_read(cpu.esp, DATA_BYTE, 2);
    cpu.esp += DATA_BYTE;  // esp 增加，指向下一个栈元素
    // REG(R_ESP)=REG(R_EBP);
    // REG(R_EBP)=MEM_R(REG(R_ESP));
    // REG(R_ESP)+=DATA_BYTE;

    // 打印汇编信息
    print_asm("leave");
}

// make_instr_helper(r)  
make_helper(concat(leave_r_, SUFFIX)) {
    do_execute();
    return 1;
}


#include "cpu/exec/template-end.h"
